package com.ws.utils.xmlUtil;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;


public class DcUtilURL {


	/**
	 * 获取和指定类同目录且同名的properties文件对应的URL。
	 * @param contextClass
	 * @return
	 */
	public static URL fromClass(Class contextClass) {
		String resourceName = contextClass.getName();
		resourceName = resourceName.replace('.', '/');

		//if (dotIndex != -1) resourceName = resourceName.substring(0, dotIndex);
		resourceName += ".properties";

		return fromResource(contextClass, resourceName);
	}

	/**
	 * 获取指定资源的URL。
	 * @param resourceName 从类路径开始描述的资源文件名称，例如：config/example.xml，其中config目录位于类路径中。
	 * @return 资源名称对应的URL。
	 */
	public static URL fromResource(String resourceName) {
		return fromResource(resourceName, null);
	}

	/**
	 * 获取指定资源的URL。
	 * @param contextClass 上下文类
	 * @param resourceName 从类路径开始描述的资源文件名称，例如：config/example.xml，其中config目录位于类路径中。
	 * @return 资源名称对应的URL。
	 */
	public static URL fromResource(Class contextClass, String resourceName) {
		if (contextClass == null)
			return fromResource(resourceName, null);
		else
			return fromResource(resourceName, contextClass.getClassLoader());
	}

	/**
	 * 获取指定资源的URL。
	 * @param resourceName 从类路径开始描述的资源文件名称，例如：config/example.xml，其中config目录位于类路径中。
	 * @param loader 上下文类装载器
	 * @return 资源名称对应的URL。
	 */
	public static URL fromResource(String resourceName, ClassLoader loader) {
		URL url = null;

		if (loader != null && url == null) url = loader.getResource(resourceName);
		if (loader != null && url == null) url = loader.getResource(resourceName + ".properties");

		if (loader == null && url == null) {
			try {
				loader = Thread.currentThread().getContextClassLoader();
			} catch (SecurityException e) {
				DcUtilURL utilURL = new DcUtilURL();
				loader = utilURL.getClass().getClassLoader();
			}
		}

		if (url == null) url = loader.getResource(resourceName);
		if (url == null) url = loader.getResource(resourceName + ".properties");



		if (url == null) url = fromFilename(resourceName);
		if (url == null) url = fromUrlString(resourceName);

		if (url == null) url = ClassLoader.getSystemResource(resourceName);
		if (url == null) url = ClassLoader.getSystemResource(resourceName + ".properties");	

		return url;
	}

	/**
	 * 将完整的文件名字符串转换成URL对象
	 * @param filename 文件全路径名
	 * @return
	 */
	public static URL fromFilename(String filename) {
		if (filename == null) return null;
		File file = new File(filename);
		URL url = null;

		try {
			if (file.exists()) url = file.toURL();
		} catch (MalformedURLException e) {
			e.printStackTrace();
			url = null;
		}
		return url;
	}
    
	/**
	 * 将完整的Url地址字符串转换成URL对象
	 * @param filename Url地址字符串
	 * @return
	 */
	public static URL fromUrlString(String urlString) {
		URL url = null;       
		try {
			url = new URL(urlString);
		} catch (MalformedURLException e) {                        
		}
        
		return url;
	}


}
